/* File: scanner.h
 * ---------------
 * You should not need to modify this file. It declare a few constants,
 * types, variables,and functions that are used and/or exported by
 * the lex-generated scanner.
 */

#ifndef _H_scanner
#define _H_scanner

#include <stdio.h>

#define MAX_NAME_LEN 1024    // Maximum length for identifiers

  
/* Typedef: TokenType enum
 * -----------------------
 * This enumeration defines the constants for the different token types.
 * The scanner should return these values for the associated key words
 * and token types.  The numbers start at 256 because 0-255 are reserved
 * for single character token values. After pp1, we will rely on
 * y.tab.h generated by yacc for these constants.
 */
/*
typedef enum { 
    T_Void = 256,
    T_Int, T_String, T_Null, 
    T_Less, T_Greater, T_Equal, T_And, T_Or,
    T_Name, T_StringConstant, T_IntConstant,
	T_Create, T_Drop, T_Select, T_Delete, T_Insert,
	T_Table, T_Distinct, T_From, T_Where, T_Order,
	T_By, T_Values, T_Not, T_Into, T_LineEnd,
    T_NumTokenTypes
} TokenType;
*/
 
/* These are a list of printable names for each token value defined
 * above.  The strings should match in position to the types. They
 * are used in our main program to verify output from your scanner.
 */
/*
static const char *gTokenNames[T_NumTokenTypes] = {
"T_Void", "T_Int", "T_String", "T_Null", "T_Less", "T_Greater", "T_Equal", "T_And", "T_Or", "T_Name", "T_StringConstant", "T_IntConstant", "T_Create", "T_Drop", "T_Select", "T_Delete", "T_Insert", "T_Table", "T_Distinct", "T_From", "T_Where", "T_Order", "T_By", "T_Values", "T_Not", "T_Into", "T_LineEnd", "T_NumTokenTypes"
};
*/

/*
  "T_Void", "T_Int", "T_Double", "T_Bool", "T_String", "T_Class", "T_Null",
  "T_LessEqual", "T_GreaterEqual", "T_Equal", "T_NotEqual",
  "T_And", "T_Or", "T_While", "T_For", "T_If", "T_Else", "T_Return",
  "T_Break", "T_Extends", "T_This", "T_Implements", "T_Interface",
  "T_New", "T_NewArray","T_Identifier", "T_StringConstant",
  "T_IntConstant", "T_DoubleConstant", "T_BoolConstant", 
*/
 
/* Typedef: YYSTYPE
 * ----------------
 * Defines the union type that is used by the scanner to store
 * attibute information about tokens as they are scanned. This
 * type definition will be generated by Yacc in the later assignments.
 */
/*
typedef union {
    int integerConstant;
    bool boolConstant;
    char *stringConstant;
    double doubleConstant;
    char identifier[MaxIdentLen+1]; // +1 for terminating null
} YYSTYPE;
*/
 
/* Global variable: yylval
 * -----------------------
 * Strange name, but by convention, this is the name of union that
 * is written to by scanner and read by parser containing information
 * about the lexeme just scanned.
 */
//extern YYSTYPE yylval;

extern char *yytext;      // Text of lexeme just scanned


int yylex();              // Defined in the generated lex.yy.c file
void yyrestart(FILE *fp); // ditto


void InitScanner();                 // Defined in scanner.l user subroutines
 
#endif
